Inspectorを拡張するアセットで超有名なOdin https://assetstore.unity.com/packages/tools/utilities/odin-inspector-and-serializer-89041?locale=ja-JP
OnValueChanged
SerialzieField変数がInspectorから変更された時のコールバックを指定できます
使い方も簡単で変数にOnValueChangedを指定するだけです
using UnityEngine;
using Sirenix.OdinInspector;
public class Sample_OnValueChanged : MonoBehaviour
{
[SerializeField]
[OnValueChanged("OnChanged")] // OnChangedが呼び出される
private int _int;
private void OnChanged()
{
Debug.Log("Called");
}
}
これでインスペクタからValueを触ると OnChanged
が呼び出されます
子クラス、配列変更
Serializableなクラス、またその配列が変更されたときは includeChildren
をtrueにします
using UnityEngine;
using Sirenix.OdinInspector;
[System.Serializable]
public class Hoge
{
[SerializeField]
private int _value;
}
public class Sample_OnValueChanged : MonoBehaviour
{
[SerializeField]
[OnValueChanged("OnChanged", includeChildren: true)]
private Hoge _hoge;
[SerializeField]
[OnValueChanged("OnChanged", includeChildren: true)]
private Hoge[] _hoges;
private void OnChanged()
{
Debug.Log("Called");
}
}
Editor開発時に重宝する機能になりますが注意点として ・変更前の値が取れないため比較ができない ・スクリプトから編集したときは呼び出されず、Editorから編集したときのみ呼び出される
があります